package object3;

/**
 * 静态内部类的使用
 */
public class StaticInnerClass01 {

    public static void main(String[] args) {
        /*
            静态内部类时定义在外部类的成员位置，并且有 static 修饰
            可以直接访问外部类的所有静态成员，包含私有的，但不能访问非静态成员
            可以添加任意访问修饰符（它本身就是成员）
            作用域：同其他的成员，为整个整体
            静态内部类 ——访问——》外部类 直接访问静态成员
            外部类 ——访问——》静态内部类 创建对象再访问
            外部其他类 ——访问——》静态内部类
            如果外部类和静态内部类的成员重名时，静态内部类访问时，遵循就近原则。如果想访问外部类的成员
            可以使用  外部类名.成员 访问(静态访问的特点)
         */
        Outer10 outer10 = new Outer10();
        outer10.m1();

        /*
            外部其他类访问静态内部类的方式
            Outer10.Inner10 inner10 = new Outer10.Inner10();//类名直接访问
            Outer10.Inner10 inner101 = outer10.getInner10()//编写一个方法，可以放回一个静态内部类的对象实例
         */
    }
}

class Outer10 {

    private int n1 = 10;

    private static String name = "张三";

    private static void cry() {}

    static class Inner10 {

        private static String name = "lmy";

        public void say() {
            System.out.println(name + " 外部类 name= " + Outer10.name);
            cry();
        }
    }

    public void m1() {  //外部类访问，需要创建对象访问
        Inner10 inner10 = new Inner10();
        inner10.say();
    }

    public Inner10 getInner10() {
        return new Inner10();
    }

    public static Inner10 getInner10_() {
        return new Inner10();
    }
}